//
//  XMEmoticonTools.swift
//  
//
//  Created by ios001 on 16/7/30.
//
//

import UIKit
// 最大行数
let XMEmoticonMaxRow = 3
// 最大列数
let XMEmoticonMaxCol = 7
// 最多表情数量
let XMEmoticonMaxCount = XMEmoticonMaxRow*XMEmoticonMaxCol - 1


class XMEmoticonTools: NSObject {
    // 全局访问点
    static let sharedTools: XMEmoticonTools = XMEmoticonTools()
    // emticon bundle文件
    lazy var emoticonBundle: NSBundle = {
        // 路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        // emoticon bundle文件
        return NSBundle(path: path)!
    }()
    
    // emoticon三维数组
    lazy var allEmoticons:[[[XMEmoticon]]] = {
        return [
            self.getEmoticonGroup(self.defaultEmoticons),
            self.getEmoticonGroup(self.emojiEmoticons),
            self.getEmoticonGroup(self.lxhEmoticons)

        ]
    }()
    // 默认表情
    lazy var defaultEmoticons:[XMEmoticon] = {
        return self.getEmoticon("default/")
    }()
    
    // emoji表情
    lazy var emojiEmoticons:[XMEmoticon] = {
        return self.getEmoticon("emoji/")
    }()
    
    // 浪小花表情
    lazy var lxhEmoticons:[XMEmoticon] = {
       return self.getEmoticon("lxh/")
    }()
    
    // 一维数组转二维数组
    func getEmoticonGroup(emoticons:[XMEmoticon]) -> [[XMEmoticon]]{
        // 计算页数
        let pageCount = (emoticons.count + XMEmoticonMaxCount - 1)/XMEmoticonMaxCount
        // 定义一个临时可变的二维数组
        var tempArray:[[XMEmoticon]] = [[XMEmoticon]]()
        
        // 遍历页数
        for i in 0..<pageCount {
            // 位置
            let location = XMEmoticonMaxCount * i
            // 长度
            var length = XMEmoticonMaxCount
            // 因为默认表情为108 会导致越界 需要计算
            if location + length > emoticons.count {
                length = emoticons.count - location
            }
            // range
            let range = NSRange(location: location, length: length)
            // 截取后的一维数组
            let array = (emoticons as NSArray).subarrayWithRange(range) as! [XMEmoticon]
            // 保存数组
            tempArray.append(array)
        }
        return tempArray
    }
    
    // 通过读取plist文件,获取一维数组
    func getEmoticon(name: String) -> [XMEmoticon] {
        // 路径
        let file = emoticonBundle.pathForResource("\(name)info.plist", ofType: nil)!
        // plist文件转数组
        let array = NSArray(contentsOfFile: file)!
        // 创建一个临时的可变数组
        var tempArray:[XMEmoticon] = [XMEmoticon]()
        // 遍历数组 字典转模型
        for dic in array {
            // 创建一个模型
            let emoticon = XMEmoticon(dict: dic as! [String: AnyObject])
            emoticon.path = "\(name)\(emoticon.png ?? "")"
            // 保存模型
            tempArray.append(emoticon)
        }
        return tempArray
    }
    
    // 传入图片名称得到对应的模型
    func searchEmoticons(chs: String?) -> XMEmoticon? {
        // 遍历默认表情数组
        for emoticon in defaultEmoticons {
            // 判断是否相同
            if emoticon.chs == chs{
                return emoticon
            }
        }
        
        // 遍历浪小花表情数组
        for emoticon in lxhEmoticons {
            if emoticon.chs == chs {
                return emoticon
            }
        }
        return nil 
    }
}
